package co.edu.udea.herbario.dao;

import java.util.List;

import org.hibernate.HibernateException;

import co.edu.udea.herbario.dto.Familia;
import co.edu.udea.herbario.excepcion.Excepcion;

/**
 * Clase de tipo interface que contiene la declaracion de los metodos utilizados para gestionar
 * los datos de la tabla Familia entre la persistencia y la logica de la aplicacion
 * 
 * @author Lorena Orozco, Alejandro Areiza, Marcela Colorado
 *
 */

public interface FamiliaDao
{	
	/**
	 * Metodo que obtiene desde la tabla Familia el elemento referenciado con el codigo indicado
	 * como parametro
	 * 
	 * @param cod es el codigo que identifica la familia dentro del sistema
	 * 
	 * @return retorna un objeto de tipo Familia
	 * 
	 * @throws Exepcion
	 */
	public Familia obtener(int cod) throws Excepcion;
	
	/**
	 * Metodo para crear un elemento dentro de la tabla Familia
	 * 
	 * @param fam es un objeto de tipo Familia que contiene los datos del elemento que se desea 
	 * ingresar en la tabla Familia
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la creacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int crear(Familia fam) throws Excepcion;
	
	/**
	 * Modifica el estado (activo o inactivo) del elemento de la tabla Familia que coincida con los datos 
	 * que contiene el objeto pasado como parametro
	 * 
	 * @param fam es un objeto de tipo Familia
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la actualizacion, de
	 * lo contrario res = -1
	 * 
	 * @throws Excepcion
	 */
	public int eliminar(Familia fam) throws Excepcion;
	
	/**
	 * Metodo para obtener de la tabla familia el registro correspondiente al nombre de la familia,
	 * el cual se entrega como parametro de entrada
	 * 
	 * @param fami es el nombre de una familia
	 * 
	 * @return retorna un objeto de tipo Familia
	 * 
	 * @throws Excepcion
	 */
	public Familia obtenerFamiliaPorNombre(String fami) throws Excepcion; 
}
